package string;

import sun.java2d.pipe.SolidTextRenderer;

/**String不适合频繁修改。内存开销大，性能低下。
 * 为解决这个问题，Java提供了一个用于修改字符串的API：StringBuilder
 *
 * StringBuider内部维护一个可变的char数组，修改性能高，开销小。并且提供了便于修改
 * 字符串的相关操作：增删改插
 */
public class StringBuilderDemo {
    public static void main(String[] args) {
        String str ="好好学习Java";

        //创建StringBuider常见的构造器
        //StringBuider builder=new StringBuilder(//内部默认表示一个空字符串
        //创建StringBuilder的同时将给顶的字符串复制一份到内部
        //StringBuffer是并发安全的，功能一致，多线程使用
        StringBuilder builder =new StringBuilder(str);
        /*曾
        好好学习Java
        好好学习Java，为了找到好工作
         */
        builder.append(",为了找到好工作！");
        System.out.println(str);//String时不变对象，内容没有发生改变
        System.out.println(builder);//改变的是StringBuilder内部字符串内容

        /*改为
        好好学习Java，为了找个好工作！

        好好学习Java，就是为了改变世界！
         */
        //将builder每部字符从下标9开始到16（不含）的内容替换为给定的字符串；
        builder.replace(9,16,"就是为了改变世界");
        System.out.println(builder);
        /*删除
                好好学习Java，就是为了改变世界！
                ，就是为了改变世界 */
        builder.delete(0,8);
        System.out.println(builder);
        /*插
                        ，就是为了改变世界
         活着就是为了改变世界*/
        builder.insert(0,"活着");
        System.out.println(builder);
        //反转字符串内容
        builder.reverse();
        System.out.println(builder);
        /*StringBuilder只是修改字符串的工具类，并非String本身。
        当使用StringBuilder修改内容后，可以点用toString方法得到内部的字符串内部内容
         */
        String line=builder.toString();
        System.out.println(line);


    }
}
